//package com.nchu.chatserver.controller;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.nchu.chatserver.dao.MessageDTO;
//import com.nchu.chatserver.dao.PrivateMessageRequest;
//import com.nchu.chatserver.entity.Message;
//import com.nchu.chatserver.service.AuthService;
//import com.nchu.chatserver.service.MessageService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.messaging.handler.annotation.MessageMapping;
//import org.springframework.messaging.handler.annotation.Payload;
//import org.springframework.messaging.handler.annotation.SendTo;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.stereotype.Component;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.socket.CloseStatus;
//import org.springframework.web.socket.TextMessage;
//import org.springframework.web.socket.WebSocketSession;
//import org.springframework.web.socket.handler.TextWebSocketHandler;
//
//import java.security.Principal;
//import java.time.Instant;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * Created with IntelliJ IDEA.
// *
// * @Author: 王小航
// * @Date: 2025/05/07/22:09
// * @Description:
// */
//@Controller
//public class WebSocketController {
//    @Autowired
//    private SimpMessagingTemplate messagingTemplate;
//    @Autowired
//    private AuthService authService;
//
//
//    @Autowired
//    private MessageService messageService;
//    @MessageMapping("/sendMessage")
//    @SendTo("/topic/messages")
//    public ResponseEntity<Message> handleMessage(MessageDTO message) {
//        // 保存消息到数据库
//        try {
//            // 调用服务层保存消息
//            Message savedMessage = messageService.sendMessage(message);
//            return ResponseEntity.ok(savedMessage);
//        } catch (Exception e) {
//            // 如果发生错误，返回错误信息
//            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
//        }
//    }
//
//    // 处理私信消息
//    // 私信消息处理（改进版）
//    @MessageMapping("/privateMsg")
//    public void handlePrivateMessage(@Payload PrivateMessageRequest request) {
//        try {
//
//            // 2. 构建数据库实体
//            MessageDTO messageDTO = new MessageDTO();
//            messageDTO.setSenderId(request.getUserId());
//            messageDTO.setReceiverId(request.getToUserId());
//            messageDTO.setContent(request.getContent());
//
//            // 3. 保存到数据库
//            Message savedMessage = messageService.sendMessage(messageDTO);
//
//            // 4. 构建前端响应格式
//            Map<String, Object> response = new HashMap<>();
//            response.put("id", savedMessage.getId());
//            response.put("content", savedMessage.getContent());
//            response.put("timestamp", savedMessage.getCreateTime());
//            response.put("from", request.getUserId());
//            response.put("to", request.getToUserId());
//
//            // 5. 发送给接收者
//            messagingTemplate.convertAndSendToUser(
//                    request.getToUserId().toString(), // 使用用户ID作为识别
//                    "/queue/private",
//                    response
//            );
//
//            // 6. 发送回执给发送者
//            Map<String, Object> receipt = Map.of(
//                    "status", "DELIVERED",
//                    "messageId", savedMessage.getId(),
//                    "timestamp", Instant.now()
//            );
//            messagingTemplate.convertAndSendToUser(
//                    request.getUserId().toString(),
//                    "/queue/status",
//                    receipt
//            );
//
//        } catch (Exception e) {
//            // 错误处理
//            Map<String, Object> error = Map.of(
//                    "error", "消息发送失败",
//                    "details", e.getMessage()
//            );
//            messagingTemplate.convertAndSendToUser(
//                    String.valueOf(request.getUserId()),
//                    "/queue/errors",
//                    error
//            );
//        }
//    }
//}
//
